package api;

import com.fasterxml.jackson.databind.ObjectMapper;
import model.User;
import model.UserDao;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: DELL
 * Date: 2023-03-24
 * Time: 20:38
 */

// 注册请求
@WebServlet("/logon")
public class LogonServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 约定前端: 前端发送 POST ContentType: application/json name:昵称 userId: 用户名 password:密码 并核验是否正确
        // 约定后端: HTTP/1.1 302 获取信息存到 user 数据库中 跳转到登陆界面
        resp.setContentType("application/json; charset = utf8");
        req.setCharacterEncoding("utf8"); // 反之乱码

        // 1. 获取请求中的字段
        ObjectMapper objectMapper = new ObjectMapper();
//        RegisterUser user = objectMapper.readValue(req.getInputStream(), RegisterUser.class);
        // 前端传来的为 json 格式字段. 需要转为 java 对象
        User user = objectMapper.readValue(req.getInputStream(), User.class);

        HttpSession session = req.getSession(false);
        System.out.println("验证码是: " + session.getAttribute("code"));

        if(!((int) session.getAttribute("code") == user.getCode())){
            resp.getWriter().write("{\"issuccess\":1}");
            return;
        }


        // 2. 查询对比username 是否存在
        UserDao userDao = new UserDao();
        int row = userDao.isExist(user.getUsername(), user);
        System.out.println("查询到" + row + "重复数据!");
        if (row == 1) {
            // 账户已经存在了, 返回 错误的状态信息
            resp.getWriter().write("{\"issuccess\":2}");
        } else {
            userDao.add(user);
            resp.getWriter().write("{\"issuccess\":3}");
        }


        // 你看懂了嘛 完全没毛病

        // 一句话概括就是
        // 前端发过来的json字符串,java里面要有一个类与之对应,这个类中的字段可以比传过来的json中的字段多,但是一定不能少,你刚才的就是因为user里面没有对应的 password1和2
        // 然后用ajax发的请求,不能通过getParameter方法来获取. 我直接多加两个 字段到 user类就解决了 可以不用创建你得类
        // 是的,你为什么不直接说话 这样更有感觉 6


//        String name = req.getParameter("name"); // 这里不行
//        String username = objectMapper.writeValueAsString("username"); // 这个方法是将java对象转成json字符串 ,上面的是将json字符串转为java对象
//        String password1 = objectMapper.writeValueAsString("password1");
//
//        User user = new User();
//        user.setName(name);
//        user.setUsername(username);
//        user.setPassword(password1);


//


//        // 2. 存储到数据库中
//        User user = new User();
//        user.setUsername(username);
//        user.setPassword(password1);
//        user.setName(name);
//        UserDao userDao = new UserDao();
//        userDao.add(user);
//        resp.getWriter().write("注册成功! 即将跳转至登陆页面!");
//        resp.sendRedirect("login.html");
    }



    /*private boolean isLegal(String name, String username, String password1, String password2) {
        // 2. 判断密码合法性
        // 判断昵称合法性
        if (name == null || name.length() == 0 || name.length() > 40) {
            // 提示昵称过不符合
            //resp.getWriter().write("");
            System.out.println("昵称不可以为空且在四十个字符以内!");
            return false;
        }
        // 判断用户名长度合法性
        if(username == null || username.length() < 4 || username.length() > 20 ) {
            //resp.getWriter().write("用户名为4-20个字符");
            System.out.println("用户名为4-20个字符");
            return false;

        }
        // 判断密码合法性
        if(password1 == null || password2 == null || password1.length() < 8 || password1.length() > 20) {
            //resp.getWriter().write("密码为8-20字符");
            System.out.println("密码为8-20字符");
            return false;

        }
        // 判断密码是否一致
        if(!password1.equals(password2)) {
            //resp.getWriter().write("密码不一致,请重新输入");
            System.out.println("密码不一致,请重新输入");
            return false;

        }

        return true;
    }*/


}
